/**
 * 处理宠物图片URL
 * 统一处理后端返回的图片路径，确保在前端能够正确显示
 */

/**
 * 构建完整的图片URL
 * @param {string} imageUrl - 后端返回的相对图片路径
 * @param {string} fallbackUrl - 当图片不存在时显示的默认图片
 * @returns {string} 完整的图片URL
 */
export function getImageUrl(imageUrl, fallbackUrl = 'https://via.placeholder.com/200x200?text=Pet+Image') {
  // 1. 如果图片路径为空，使用默认图片
  if (!imageUrl) {
    return fallbackUrl;
  }
  
  // 2. 如果是完整URL，直接返回
  if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {
    return imageUrl;
  }
  
  // 3. 如果是data URL (base64编码的图片数据)，直接返回
  if (imageUrl.startsWith('data:image/')) {
    return imageUrl;
  }
  
  // 4. 针对本地文件系统上的图片路径进行特殊处理
  if (imageUrl.includes('\\') || 
      imageUrl.includes('/Users/') || 
      imageUrl.startsWith('file://') ||
      imageUrl.startsWith('C:') ||
      imageUrl.startsWith('D:')) {
    
    // 尝试转换为file:// URL格式，如果还不是
    if (!imageUrl.startsWith('file://')) {
      try {
        const fileUrl = new URL('file://' + imageUrl).href;
        return fileUrl;
      } catch (e) {
        return imageUrl;
      }
    }
    return imageUrl;
  }
  
  // 5. 格式化路径，确保以/开头
  const path = imageUrl.startsWith('/') ? imageUrl : `/${imageUrl}`;
  
  // 获取当前运行环境的URL基础路径
  const currentBaseUrl = window.location.origin;
  
  // 6. 优先使用相对路径（依赖代理配置）
  const relativeUrl = path;
  
  // 7. 提供多种URL选项，优先使用相对路径，依次降级
  const absoluteUrls = [
    relativeUrl,                             // 首选：相对路径
    `${currentBaseUrl}${path}`,              // 备选1：使用当前应用的基础URL
    `http://localhost:3000${path}`           // 备选2：直接使用后端服务器地址
  ];
  
  // 返回首选路径
  return absoluteUrls[0];
}

/**
 * 处理本地图片上传，返回可预览的Base64 URL
 * @param {File} file - 上传的图片文件
 * @returns {Promise<string>} 返回一个Promise，解析为图片的Base64 URL
 */
export function readLocalImage(file) {
  return new Promise((resolve, reject) => {
    if (!file || !(file instanceof File)) {
      reject(new Error('无效的文件对象'));
      return;
    }
    
    // 验证文件类型
    if (!file.type.match(/image\/(jpeg|jpg|png|gif)/i)) {
      reject(new Error('不支持的图片类型，仅支持JPG/PNG/GIF'));
      return;
    }
    
    const reader = new FileReader();
    
    reader.onload = (event) => {
      resolve(event.target.result);
    };
    
    reader.onerror = (error) => {
      reject(error);
    };
    
    reader.readAsDataURL(file);
  });
} 